package com.ftg.learn.chapter14;

import java.util.*;

/**
 * 数据 : 客观世界当中，存在的文字 音频  视频书等
 * 信息 ： 对数据进行分析、归纳、提取、汇总等操作以后提取出来的有价的信息
 * 数据结构(data structure)是带有结构特性的数据元素的集合
 * 数据的逻辑结构
 *  1.集合：数据结构中的元素之间除了“同属一个集合” 的相互关系外，别无其他关系； [1]
 *  2.线性结构：数据结构中的元素存在一对一的相互关系； [1]
 *  3.树形结构：数据结构中的元素存在一对多的相互关系； [1]
 *  4.图形结构：数据结构中的元素存在多对多的相互关系。 [1]
 *    简单 ：
 *      线性结构       还有栈、队列和串等都属于线性结构
 *      非线性结构两类  数组、广义表、树结构和图结构等数据结构都属于非线性结构
 * 数据的物理结构
 *  顺序、 数组
 *  链接、链式存储结构
 *  索引、 tree
 *  散列 hash
 * <p>
 * 常见的数据结构
 * 数组 ： 定长  : 基本 引用 []
 *        变长  : Vector
 *                ArrayList
 *栈( Stack) :
 *     栈是一种特殊的线性表，它只能在一个表的一个固定端进行数据结点的插入和删除操作。
 *     栈按照先进后出或后进先出的原则来存储数据，也就是说，先插入的数据将被压入栈底，最后插入的数据在栈顶，
 *     读出数据时，从栈顶开始逐个读出
 *     Stack
 *       push 压栈
 *       pop  弹栈
 *       peek 查看栈顶元素
 *       search 查找位置
 *   队列(Queue)
 *      队列和栈类似，也是一种特殊的线性表。和栈不同的是，队列只允许在表的一端进行插入操作，而在另一端进行删除操作。
 *      先进先出，后进后出
 *   链表( Linked List)
 *      链表是一种数据元素按照链式存储结构进行存储的数据结构
 *      LinkedList
 *   映射  k,v 键值对  key : value
 *    map :  hashmap
 * @author kangjx
 * @createTime 2022/8/15
 */
public class LearnDataStruct {

    public static void main(String[] args) {
        //初始长度默认为10  个人指定以外
//        //扩容长度 : 指定按定的来,固定扩容长度  如果不指定为原长度的一倍
//        Vector<Integer> v = new Vector<>(3,5);
//        v.add(23);
//        v.add(45);
//        v.add(3,45);
//
//        for(int i = 0 ;i < v.size();i++){
//            System.out.println(v.get(i));
//        }
//
//        //默认为空  没有堆当中开辟数组空间
//        //.add()  开辟一个堆地址 长度10的数组空间
//        //ArrayList 原长度一半
//        ArrayList<Integer> al = new ArrayList<>(13);
//        al.add(23);
        //多
//        Stack<Integer> stack = new Stack<>();
//        stack.push(1);
//        stack.push(2);
//        stack.push(3);
//        stack.push(4);
//
//        while(stack.size() > 0){
//            System.out.println(stack.peek());
//        }
        //offer  add方法 功能以及实现是一样的
//        ArrayDeque a = new ArrayDeque();
//        Queue<String> ar = new ArrayDeque<>();
        // 面向接口编程  接收的实现类的实例
        // 多态 ： 利于扩展 二次开发 维护
        // 隔离原则
//        ar.offer("abc");
//        ar.add("abc");
        //抓人游戏
//        ArrayDeque<Integer> ar = new ArrayDeque<>();
//        ar.add(1);
//        ar.add(2);
//        ar.add(3);
//        ar.add(4);
//        ar.add(5);
//        ar.add(6);
//        ar.add(7);
//
//        int n = 1;
//        while(ar.size() > 1){
//            if(n ==3){
//                ar.pop();
//                n = 1;
//            }else{
//                ar.add(ar.pop());
//                n++;
//            }
//        }

        //面试原题 : 力扣题  牛客网  杭电
//        while(ar.size() > 2){
//            ar.add(ar.pop());
//            ar.add(ar.pop());
//            ar.pop();
//        }

//        System.out.println(ar.size());
//        System.out.println(ar.peekFirst());
//        System.out.println(ar.peekLast());

//        LinkedList ll = new LinkedList();
//        ll.add(23);
//
//        ll.addFirst(23);
//        ll.removeFirst();
//
////        ll.addLast();
//        ll.removeFirst();

//        List<Integer> list = new ArrayList<>();
//        list.add(23);
//
//        List<Integer> list1 = new LinkedList<>();
//        list1.add(23);


    }

}
